package models_sports

import (
	"fmt"
	"time"
)

// FootballMatch 足球赛程
// 比分字段说明
// example：[1, 0, 0, 0, -1, 0, 0]
//	Enum:
//		Array[7]
//		0:"比分(常规时间) - int"
//		1:"半场比分 - int"
//		2:"红牌 - int"
//		3:"黄牌 - int"
//		4:"角球，-1表示没有角球数据 - int"
//		5:"加时比分(120分钟，即包括常规时间比分)，加时赛才有 - int"
//		6:"点球大战比分(不包含常规时间及加时赛比分)，点球大战才有 - int"
// 双回合常规时间(包括加时时间)总比分 字段说明
// example：[3, 6]
//	Enum:
//		Array[2]
//		0:"主队比分 - int"
//		1:"客队比分 - int"
type FootballMatch struct {
	ID            int                 `json:"id" gorm:"primaryKey; comment:比赛id "`
	SeasonID      int                 `json:"season_id" gorm:"type:int(11);comment:赛季id"`
	CompetitionID int                 `json:"competition_id" gorm:"type:int(11);comment:赛事id"`
	HomeTeamID    int                 `json:"home_team_id" gorm:"type:int(11);comment:主队id"`
	AwayTeamID    int                 `json:"away_team_id" gorm:"type:int(11);comment:客队id"`
	StatusID      FootBallMatchStatus `json:"status_id" gorm:"type:int(11);comment:比赛状态"`
	MatchTime     int64               `json:"match_time" gorm:"type:bigint(20);comment:比赛时间"`
	TimePlayed    uint32              `json:"time_played" gorm:"type:int(11); comment:进行时间"`
	Neutral       int                 `json:"neutral" gorm:"type:int(11);comment:是否中立场，1-是、0-否"`
	Note          string              `json:"note" gorm:"type:varchar(255);comment:备注"`
	HomeScores    string              `json:"home_scores" gorm:"type:varchar(255);comment:主队比分字段 example：[1, 0, 0, 0, -1, 0, 0]"`
	AwayScores    string              `json:"away_scores" gorm:"type:varchar(255);comment:客队比分字段example：[1, 0, 0, 0, -1, 0, 0]"`
	HomePosition  string              `json:"home_position" gorm:"type:varchar(255);comment:主队排名"`
	AwayPosition  string              `json:"away_position" gorm:"type:varchar(255);comment:客队排名"`
	Mlive         int                 `json:"mlive" gorm:"type:int(11);comment:是否有动画，1-是、0-否"`
	Intelligence  int                 `json:"intelligence" gorm:"type:int(11);comment:是否有情报，1-是、0-否"`
	Lineup        int                 `json:"lineup" gorm:"type:int(11);comment:是否有阵容，1-是、0-否"`
	VenueID       int                 `json:"venue_id" gorm:"type:int(11);comment:场馆id"`
	RefereeID     int                 `json:"referee_id" gorm:"type:int(11);comment:裁判id"`
	RelatedID     int                 `json:"related_id" gorm:"type:int(11);comment:双回合中另一回合比赛id"`
	AggScore      string              `json:"agg_score" gorm:"type:varchar(255);comment:双回合常规时间(包括加时时间)总比分  example：[3, 6] ([主队比分, 客队比分])"`
	UpdatedAt     int                 `json:"updated_at" gorm:"type:int(11);comment:更新时间"`
}

type FootBallMatchStatus uint32

// GetTimePlayed 比赛进行分钟数获取公式
// 上半场：比赛进行分钟数=(当前时间戳-上半场开球时间戳) / 60 + 1
// 下半场：比赛进行分钟数=(当前时间戳-下半场开球时间戳) / 60 + 45 + 1
func (f FootBallMatchStatus) GetTimePlayed(kTime int64) uint32 {
	nowTime := time.Now().Unix()
	var played uint32
	if kTime == 0 {
		return 0
	}
	if f == 2 {
		played = uint32(((nowTime - kTime) / 60) + 1)
	} else if f == 4 {
		played = uint32(((nowTime - kTime) / 60) + 45 + 1)
	}
	return played
}

func (f FootBallMatchStatus) ToString() string {
	statusMap := map[uint32]string{
		0:  "比赛异常",
		1:  "未开赛",
		2:  "上半场",
		3:  "中场",
		4:  "下半场",
		5:  "加时赛",
		6:  "加时赛(弃用)",
		7:  "点球决战",
		8:  "完场",
		9:  "推迟",
		10: "中断",
		11: "腰斩",
		12: "取消",
		13: "待定",
	}
	s, ok := statusMap[uint32(f)]
	if !ok {
		return fmt.Sprintf("未知:%d", uint32(f))
	}
	return s
}
func (m FootballMatch) GetStartingStatus() []int {
	return []int{1, 2, 3, 4, 5, 6, 7}
}

func (f FootBallMatchStatus) MatchTempScheduleStatus() uint32 {
	// 比赛状态, 1-进行,2-未开赛,3-完场
	if f <= 1 {
		return 2 // 2-未开赛
	}
	// 大于等于8 的数据定义为完场
	if f == 8 {
		return 3 // 3-完场
	}
	if f > 1 && f < 8 {
		return 1 // 1-进行
	}
	if f > 8 && f <= 13 {
		return 4 // 4-异常
	}
	return 0
}
